// 常见数组中包含的数据类型
const numberList: number[] = [1, 2, 3]
const stringList: string[] = ['a', 'b', 'c']
const undefinedList: undefined[] = [undefined, undefined]
// 加入有多种数据类型时的写法：数据和类型不需要一一对应,也可以定义了这个类型但是没有这个类型的数据
const dataList: (number | string)[] = ['str']
const dataList2: (number | string)[] = ['str', 2]

// 元组（使用得很少）
// 注：数组中定义的数据类型和数据位置不需要一一对应
// 但是这一点如果是 元组 则不行，元组规定数组的数据必须按照定义数据时的顺序来写，比如：
const yuanzuArr: [string, string, number] = ['str', 'string', 20] // 必须要这样写才行
// 下面都是元组数据会报错的情况：
// const yuanzuArr2: [string, string, number] = ['str', 'string', 20, 2]// 数据项多了会报错
// const yuanzuArr2: [string, string, number] = ['str', 'string']// 数据项少了会报错
// const yuanzuArr2: [string, string, number] = ['str', 2, 'string']// 数据项与类型没对应上会报错

// type alias 类型别名
// 第一种定义类型别名的方式
type Lady = { name: string; age: number } // 定义了一个类型名为 Lady
// 第二种定义类型别名的方式
class Madam {
  name: string
  age: number
}
const userList: Lady[] = [
  // 这时候 userList 中的每一项数据都需要符合 Lady 这个类型别名定义的类型规则
  { name: '小明', age: 18 },
  { age: 20, name: '小李' }, // 顺序可以不一致
]
const userArr: Madam[] = [
  { name: '小明', age: 18 },
  { age: 20, name: '小李' }, // 顺序可以不一致
]
